package com.atlin.project.utils;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class EChartsValidator {

    private static final ObjectMapper objectMapper = new ObjectMapper();
    
    public static boolean isValidEChartsOption(String optionJson) {
        try {
            JsonNode optionNode = objectMapper.readTree(optionJson);

            // 校验 option 是一个对象
            if (!optionNode.isObject()) {
                return false;
            }

            // 校验 xAxis 字段
            JsonNode xAxisNode = optionNode.get("xAxis");
            if (xAxisNode != null) {
                if (!xAxisNode.get("data").isArray()) {
                    return false; // xAxis 字段必须是一个数组
                }
                for (JsonNode axisNode : xAxisNode) {
                    if (!axisNode.isObject()) {
                        return false; // xAxis 数组中的每个元素必须是一个对象
                    }
                    // 校验 xAxis 对象中的字段
                    // 例如，type 字段必须是字符串
                    JsonNode typeNode = axisNode.get("type");
                    if (typeNode != null && !typeNode.isTextual()) {
                        return false;
                    }
                }
            }

            // 校验 yAxis 字段
            // 类似于 xAxis 的校验逻辑...

            // 校验 series 字段
            JsonNode seriesNode = optionNode.get("series");
            if (seriesNode != null) {
                if (!seriesNode.isArray()) {
                    return false; // series 字段必须是一个数组
                }
                for (JsonNode seriesItemNode : seriesNode) {
                    if (!seriesItemNode.isObject()) {
                        return false; // series 数组中的每个元素必须是一个对象
                    }
                    // 校验 series 对象中的字段
                    // 例如，type 字段必须是字符串
                    JsonNode seriesTypeNode = seriesItemNode.get("type");
                    if (seriesTypeNode != null && !seriesTypeNode.isTextual()) {
                        return false;
                    }
                }
            }

            // 校验其他字段...

            return true; // 所有校验通过
        } catch (Exception e) {
            e.printStackTrace();
            return false; // 解析或校验失败
        }
    }

    public static void main(String[] args) {
        // 测试校验方法
        String optionJson = "{\n" +
                "    \"title\": {\n" +
                "        \"text\": \"网站用户增长情况\"\n" +
                "    },\n" +
                "    \"tooltip\": {\n" +
                "        \"trigger\": \"axis\"\n" +
                "    },\n" +
                "    \"xAxis\": {\n" +
                "        \"type\": \"category\",\n" +
                "        \"data\": [\"1号\", \"2号\", \"3号\", \"4号\", \"5号\", \"6号\", \"7号\"]\n" +
                "    },\n" +
                "    \"yAxis\": {\n" +
                "        \"type\": \"value\"\n" +
                "    },\n" +
                "    \"series\": [\n" +
                "        {\n" +
                "            \"name\": \"用户数\",\n" +
                "            \"type\": \"line\",\n" +
                "            \"data\": [10, 20, 30, 90, 0, 10, 20]\n" +
                "        }\n" +
                "    ]\n" +
                "}";
        boolean isValid = isValidEChartsOption(optionJson);
        System.out.println("Option is valid: " + isValid);
    }
}
